<?php
// 求本月1号是星期几？（周一为第一天）
function getFirstDayOfMonthWeekday() {
    $firstDay = (new DateTime())->modify("first day of this month");
    return $firstDay->format("N"); // 1-7 (1=周一, 2=周二, ..., 7=周日)
}

echo "本月1号是星期" . ['一','二','三','四','五','六','日'][getFirstDayOfMonthWeekday() - 1] . "\n";

// 求当前日期所在的月有几天？
function getDaysInCurrentMonth() {
    return (new DateTime())->format("t");
}

echo "当前日期所在的月有" . getDaysInCurrentMonth() . "天\n";

// 写一个函数，显示指定年、月的月历（周一在第一列）
function yueli($year, $yue) {
    // 创建指定月份的第一天
    $date = new DateTime("$year-$yue-01");
    $firstDay = clone $date;

    // 获取月份第一天是星期几 (1=周一, 2=周二, ..., 7=周日)
    $firstDayWeekday = (int)$firstDay->format("N");

    // 获取月份天数
    $daysInMonth = (int)$date->format("t");

    // 月份名称
    $monthName = $date->format("Y年m月");

    echo "====================\n";
    echo "     {$monthName}    \n";
    echo "====================\n";
    echo "一 二 三 四 五 六 日\n";

    // 初始化计数器
    $dayCount = 1;

    // 打印日历
    for ($i = 0; $i < 6; $i++) { // 最多6行
        for ($j = 1; $j <= 7; $j++) { // 每周7天，从周一开始
            if ($i === 0 && $j < $firstDayWeekday) {
                // 第一行，在第一天之前的空格
                echo "   ";
            } elseif ($dayCount <= $daysInMonth) {
                // 打印日期，对齐显示
                echo str_pad($dayCount, 2, " ", STR_PAD_LEFT) . " ";
                $dayCount++;
            } else {
                // 日期打印完毕后的空格
                echo "   ";
            }
        }
        echo "\n";

        // 如果所有日期都已打印，提前结束
        if ($dayCount > $daysInMonth) {
            break;
        }
    }
    echo "====================\n";
}

// 使用示例
yueli(2025, 10);

// 也可以显示当前月份
// $currentYear = date('Y');
// $currentMonth = date('m');
// yueli($currentYear, $currentMonth);
?>